<?php


namespace Hx\Http;


class Input {

    /**
     * 过滤数据
     * 转换类型
     * @param string $type
     * @param mixed $value
     * @return bool|float|int|string
     */
    private function filter($type, $value) {
        switch ($type) {
            case 'int':
                return (int)$value;
            case 'bool':
                return (bool)$value;
            case 'float':
                return (float)$value;
            case 'string':
                return (string)$value;
            default:
                return $value;
        }
    }

    /**
     * 获取input数据
     * 并进行类型处理
     * @param array $requestData
     * @param array $args
     * @return array
     */
    private function getRequest($requestData, $args) {
        $_return = array();
        foreach ($args as $name) {
            $name = explode(':', $name);
            if ($name[1]) {
                #处理类型转换
                $_return[$name[0]] = $this->filter($name[1], $requestData[$name[0]]);
            } else {
                $_return[$name[0]] = $requestData[$name[0]];
            }
        }
        #如果只有一个元素，就返回当前一个
        if(count($_return) === 1){
            $_return = array_values($_return);
            return $_return[0];
        }
        return $_return;
    }

    /**
     * GET数据
     * @return array
     */
    public function get() {
        $args = func_get_args();
        if (func_num_args() === 1 && $args[0] === TRUE) {
            return $_GET;
        }
        return $this->getRequest($_GET, $args);
    }

    /**
     * POST数据
     * @return array
     */
    public function post() {
        $args = func_get_args();
        if (func_num_args() === 1 && $args[0] === TRUE) {
            return $_POST;
        }
        return $this->getRequest($_POST, $args);
    }

    /**
     * REQUEST数据
     * @return array
     */
    public function request() {
        $args = func_get_args();
        if (func_num_args() === 1 && $args[0] === TRUE) {
            return $_REQUEST;
        }
        return $this->getRequest($_REQUEST, $args);
    }

    /**
     * Input流原始数据
     * @return string
     */
    public function raw() {
        return file_get_contents('php://input');
    }


}